 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql;
using MySql.Data;
using MySql.Data.MySqlClient;
using MySql.Data.Entity;
using ASV.Classes;
using System.Data;

namespace ASV.Account
{
    //Hallo dieses Kommentar ist unwichtig
    /*
      Diese Datei ist für den Bestellprozess zuständig
    */
    public partial class kaufen : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {
            Authentication auth = new Authentication();
            int userGroup;
            int allowedGroup;

            string selectedID = Request.QueryString["ID"];


            if (auth.isLoggedIn() == true)
            {
                userGroup = int.Parse(HttpContext.Current.Session["benutzertyp"].ToString());
                allowedGroup = 2;
                if (auth.checkUserGroup(userGroup, allowedGroup) == false)
                {
                    Response.Redirect("~/Error.aspx");
                }
            }
            else
            {
                Response.Redirect("~/Error.aspx");
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Connection mycon = new Connection();
            ListItem option;
            DataTable datatable = new DataTable();
            object[] values = null;
            string selectedID = Request.QueryString["ID"];
            // Die Select-Anweisung fragt alle Versionen zu einem Produkt http://localhost:1974/Account/kaufen.aspx.csan, um dem Kunden eine Auswahl der möglichen Versionen die er Bestellen kann zu zeigen.
            datatable = mycon.select("SELECT p.name,versionsnummer,vv.vVersionsID,p.bildpfad,vv.ProduktID,beschreibung,preis,pt.Name FROM versionsverwaltung as vv JOIN produkte as p on p.ID = vv.ProduktID JOIN produkttyp as pt on pt.ID = p.prodkttype WHERE p.ID='" + selectedID + "' ORDER BY `prodkttype` ASC");
            
            //Prüfung ob Versionen gefunden wurden, fals ja wird eine Produktdarstellung für den Kunden angezeigt ansonsten wird zur vorherigen Seite weitergeleitet.
            if (datatable.Rows.Count != 0)
            {
                values = datatable.Rows[0].ItemArray;
                lb_produktName.Text = values[0].ToString();

                produktbild.ImageUrl = "../"+values[3].ToString();
                typ.Text = values[7].ToString();
                beschreibung.Text = values[5].ToString();
                preis.Text = values[6].ToString();
                
                for (int i = 0; i < datatable.Rows.Count; i++)
                {
                    values = datatable.Rows[i].ItemArray;
                    option = new ListItem();
                    option.Text = values[1].ToString();
                    version.Items.Add(option);
                }
            }
            else
            {
                Response.Redirect("~/Account/Downloads.aspx?error=0");
            }
        
            confirm.Text = "Bestätigen";
            confirm.CssClass = "btn btn-success";
            cancel.Text = "Abbrechen";
            cancel.CssClass = "btn btn-danger";

        }
        
        //Diese Funktion wird beim Bestell abbruch aufgerufen und der Kunde wird auf die Startseite weitergeleitet.
        protected void btnbuycancel_Click(object sender, EventArgs e)
        {
            Response.Redirect("../Start.aspx");
        }
        
        //Diese Funktion wird beim Bestellen eines Artikels aufgerufen
        protected void btnbuy_Click(object sender, EventArgs e)
        {
            Connection mycon = new Connection();
            DataTable datatable;
            string email = HttpContext.Current.Session["email"].ToString();
            string selectedID = Request.QueryString["ID"];
            string kdn = HttpContext.Current.Session["kundennummer"].ToString();
            string versionsnummer = version.SelectedItem.Text;
            string randomwert = new Random().Next(1000000, 9999999).ToString();
            
            //Diese INSERT-Anweisung erstellt eine Lizenz für ein Produkt.
            mycon.insertUpdate("INSERT INTO lizenzverwaltung (versionsID,lizenznummer) VALUES ((SELECT vVersionsID FROM versionsverwaltung WHERE ProduktID = '" + selectedID + "' AND versionsnummer = '" + versionsnummer + "'),'" + randomwert + "');");
            
            //Hierbei wird die Bestellung eines Produkts in die Tabelle Bestellung eingefügt.
            mycon.insertUpdate("INSERT INTO `bestellung` (`kundennummer_btl`,`lizenzID`,`bestelldatum`) VALUES ('" + kdn + "',(SELECT lizenzID FROM lizenzverwaltung WHERE lizenznummer = '" + randomwert + "'),'" + DateTime.Today.ToString("yyyy-MM-dd") + "')");
            
            datatable = mycon.select("SELECT p.name,versionsnummer FROM versionsverwaltung as vv JOIN produkte as p on p.ID = vv.ProduktID JOIN produkttyp as pt on pt.ID = p.prodkttype WHERE p.ID='" + selectedID + "' AND vv.versionsnummer = '" + versionsnummer + "'");
            
            //Es wird ein Hinweis gegeben das die Bestellung erfolgreich war und eine Email an den Käufer versendet.
            showStart.Visible = false;
            hiddenStart.Visible = true;
            kdn = HttpContext.Current.Session["nachname"].ToString();
            sendEmail mail = new sendEmail("Noreply@0815.de", email,"","","Kauf des Produkt "+ datatable.Rows[0].ItemArray[0].ToString(),"Sehr geehrter Herr "+ kdn +", <br> Sie haben " + datatable.Rows[0].ItemArray[0].ToString() + " Version "+datatable.Rows[0].ItemArray[1].ToString() +" bei uns erworben, Vielen Dank für den Kauf und Viel Erfolg mit der Software! <br> Ihre 0815-IT GMBH");
        }
    }
}